/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package brasilquad;

import brasilquad.beans.ManipulaArquivo;
import brasilquad.beans.NoBruto;
import brasilquad.beans.NoQuad;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.ArrayList;
import javax.swing.JFrame;

/**
 *
 * @author rooke
 */
public class Aplicacao extends JFrame {

    // Frame.class
    Ponto mapa = new Ponto();
    Graphics painel;
    Graphics2D clip;

    public Aplicacao() {
        setTitle("Teste mapa");
        setSize(800, 640);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    @Override
    public void paint(Graphics g) {

        painel = g;

        //Criamos um contexto gr?fico com a ?rea de pintura restrita
        //ao interior da janela.
        clip = (Graphics2D) g.create(getInsets().left, getInsets().top, getWidth() - getInsets().right, getHeight() - getInsets().bottom);
        //Pintamos o fundo do frame de branco
        clip.setColor(Color.WHITE);
        clip.fill(clip.getClipBounds());

        // Pega os pontos do arquivo
        ArrayList<NoBruto> brutList = new ManipulaArquivo().lerArquivoMapa();

        // Transforma o primeiro ponto do arquivo em n? e raiz
        NoBruto noBruto = brutList.get(0);

        NoQuad raiz = new NoQuad();
        raiz.setGeonameId(noBruto.getGeonameId());
        raiz.setLatitude(noBruto.getLatitude());
        raiz.setLongitude(noBruto.getLongitude());
        raiz.setPosicaoArq(noBruto.getPosicaoArq());
        raiz.setFeatureClass(noBruto.getFeatureClass());
        raiz.setFeatureCode(noBruto.getFeatureCode());

        // remove ele da lista
        brutList.remove(0);

        // constroi a arvore
        for (NoBruto bruto : brutList) {

            NoQuad no = new NoQuad();
            no.setGeonameId(bruto.getGeonameId());
            no.setLatitude(bruto.getLatitude());
            no.setLongitude(bruto.getLongitude());
            no.setPosicaoArq(bruto.getPosicaoArq());
            no.setFeatureClass(bruto.getFeatureClass());
            no.setFeatureCode(bruto.getFeatureCode());

            raiz.inserirNo(no);
        }

        //plota o mapa
        plotar(raiz, null, clip);


        clip.dispose();
    }

    private void plotar(NoQuad raiz, String featureCode, Graphics2D grap) {
        if (raiz != null) {
            //if (tipo == null) {
            // Cidades

            //System.out.println(raiz.getFeatureCode());

            if(raiz.getFeatureCode().contains("PPL")){
                mapa.plotaCinza(grap, (int) (raiz.getLatitude()*-15), (int) (raiz.getLongitude()*15));
            }
            // Aeroportos
            else if(raiz.getFeatureCode().equals("AIRP")){
                mapa.plotaVerde(grap, (int) (raiz.getLatitude()*-15), (int) (raiz.getLongitude()*15));
            }
            //escolas
            else if(raiz.getFeatureCode().contains("SCH")){
                mapa.plotaAmarelo(grap, (int) (raiz.getLatitude()*-15), (int) (raiz.getLongitude()*15));
            }
            //praias
            else if(raiz.getFeatureCode().equals("BCH")||raiz.getFeatureCode().equals("BCHS")){
                mapa.plotaAzul(grap, (int) (raiz.getLatitude()*-15), (int) (raiz.getLongitude()*15));
            }
            else{
                mapa.plotaPreto(grap, (int) (raiz.getLatitude()*-15), (int) (raiz.getLongitude()*15));
            }
            


            plotar(raiz.getBaixoDireita(), featureCode, grap);
            plotar(raiz.getBaixoEsquerda(), featureCode, grap);
            plotar(raiz.getCimaDireita(), featureCode, grap);
            plotar(raiz.getCimaEsquerda(), featureCode, grap);

        }
    }

//    public static void main(String[] args) {
//        EventQueue.invokeLater(new Runnable() {
//
//            @Override
//            public void run() {
//                Aplicacao a = new Aplicacao();
//                a.setVisible(true);
//
//            }
//        });
//    }
}
